package com.collections;

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import org.junit.Test;

public class BiMapDemo {

    /**
     * BiMap提供了一种新的集合类型，它提供了key和value的双向关联的数据结构
     *     能非常方便的实现map<key,value>的转置要求，也就是value变为key,key变为value
     * 　　 保证值是唯一的，因此返回Set而不是普通的Collection
     */
    @Test
    public void biMapTest(){
        BiMap<Integer, String> hashBiMap = HashBiMap.create();
        hashBiMap.put(1,"用户1");
        hashBiMap.put(2,"用户2");
        hashBiMap.put(3,"用户3");
        //键值转换
        BiMap<String, Integer> inverseBiMap = hashBiMap.inverse();
        inverseBiMap.entrySet().forEach(x->
                System.out.println("key:"+x.getKey()+", value:"+x.getValue()));
        //因为值唯一(需要翻转时候key唯一),所以添加时如果value存在抛异常,可使用forcePut强制替换键
        // hashBiMap.put(4,"用户3");  IllegalArgumentException
        hashBiMap.forcePut(4,"用户3"); //强制替换用户3的键为4
        //根据kv进行消费返回结果
        String compute = hashBiMap.compute(4, (x, y) -> x + y);
        System.out.println(compute); // 4用户3
    }
}
